{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 90,
   "metadata": {},
   "outputs": [],
   "source": [
    "%matplotlib inline\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "from sklearn.linear_model import ElasticNetCV, ElasticNet, Ridge\n",
    "from sklearn.model_selection import learning_curve, ShuffleSplit\n",
    "from sklearn.model_selection import GridSearchCV, cross_val_score"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 144,
   "metadata": {},
   "outputs": [],
   "source": [
    "n_samples = 500\n",
    "n_features = 500\n",
    "all_inputs = np.random.randn(n_samples, n_features)\n",
    "\n",
    "# Ground truth model: linear combination of the first two variables\n",
    "w_true = np.zeros(n_features)\n",
    "w_true[:2] = 1.\n",
    "y = np.dot(all_inputs, w_true)\n",
    "\n",
    "# Partial observation: the first informative variable cannot be observed\n",
    "X = all_inputs[:, 1:]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 145,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(500,)"
      ]
     },
     "execution_count": 145,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 146,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXoAAAD8CAYAAAB5Pm/hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAADgVJREFUeJzt3X+sX3V9x/Hna60gyrRgbxi2sNtEsoUxF80NYyHZCDUb\nWkL5wxCYc1VJmiVsw8mCRf/gL5MSF38s21wacHYZURlqIKLOjmHM/oB5+eEPKEiDRdqAvQxRmZmu\n870/7mG5hfbe2+/5fnvaz30+kuZ+z/me7/e8c9I8e3q+P26qCklSu35p6AEkSZNl6CWpcYZekhpn\n6CWpcYZekhpn6CWpcYZekhpn6CWpcYZekhq3eugBANauXVvT09NDjyFJJ5T777//2aqaWmq74yL0\n09PTzM7ODj2GJJ1Qkjy5nO28dCNJjTP0ktQ4Qy9JjTP0ktQ4Qy9JjTP0ktQ4Qy9JjTP0ktQ4Qy9J\njTsuPhkrLWV6212D7Xvv9k2D7VsaB8/oJalxhl6SGmfoJalxhl6SGmfoJalxhl6SGmfoJalxhl6S\nGmfoJalxhl6SGmfoJalxhl6SGmfoJalxhl6SGrdk6JN8MsmBJN9ZsO7DSR5N8q0kX0iyZsF9NyTZ\nk+SxJH8wqcElScuznDP6TwGXvGTdLuC8qnoj8F3gBoAk5wJXAr/RPebvkqwa27SSpKO2ZOir6uvA\ncy9Z99WqOtgt3gus725vBj5TVT+rqu8Be4DzxzivJOkojeMa/XuAL3e31wFPLbhvX7dOkjSQXqFP\n8kHgIHDrCI/dmmQ2yezc3FyfMSRJixg59EneBVwKvKOqqlu9HzhrwWbru3UvU1U7qmqmqmampqZG\nHUOStISRQp/kEuB64LKq+umCu+4ErkxycpINwDnAf/QfU5I0qtVLbZDk08BFwNok+4AbmX+XzcnA\nriQA91bVn1TVw0luAx5h/pLONVX1v5MaXpK0tCVDX1VXHWb1LYts/yHgQ32GkiSNj5+MlaTGGXpJ\napyhl6TGGXpJapyhl6TGGXpJapyhl6TGGXpJapyhl6TGGXpJapyhl6TGGXpJatySX2omrXTT2+4a\nZL97t28aZL9qj2f0ktQ4Qy9JjTP0ktQ4Qy9JjTP0ktQ4Qy9JjTP0ktQ4Qy9JjTP0ktS4JUOf5JNJ\nDiT5zoJ1pyfZleTx7udp3fok+eske5J8K8mbJzm8JGlpyzmj/xRwyUvWbQPurqpzgLu7ZYC3Aud0\nf7YCnxjPmJKkUS0Z+qr6OvDcS1ZvBnZ2t3cCly9Y/481715gTZIzxzWsJOnojXqN/oyqerq7/Qxw\nRnd7HfDUgu32deskSQPp/WJsVRVQR/u4JFuTzCaZnZub6zuGJOkIRg39D168JNP9PNCt3w+ctWC7\n9d26l6mqHVU1U1UzU1NTI44hSVrKqKG/E9jS3d4C3LFg/R937765APjRgks8kqQBLPmLR5J8GrgI\nWJtkH3AjsB24LcnVwJPAFd3mXwLeBuwBfgq8ewIzS5KOwpKhr6qrjnDXxsNsW8A1fYeSJI2Pn4yV\npMYZeklqnKGXpMYZeklqnKGXpMYZeklqnKGXpMYt+T56aaHpbXcNPYKko+QZvSQ1ztBLUuMMvSQ1\nztBLUuMMvSQ1ztBLUuMMvSQ1ztBLUuMMvSQ1ztBLUuMMvSQ1ztBLUuMMvSQ1ztBLUuMMvSQ1rlfo\nk/xFkoeTfCfJp5O8MsmGJPcl2ZPks0lOGtewkqSjN3Lok6wD/hyYqarzgFXAlcBNwEer6g3AD4Gr\nxzGoJGk0fS/drAZOSbIaeBXwNHAxcHt3/07g8p77kCT1MHLoq2o/8FfA95kP/I+A+4Hnq+pgt9k+\nYN3hHp9ka5LZJLNzc3OjjiFJWkKfSzenAZuBDcDrgVcDlyz38VW1o6pmqmpmampq1DEkSUvoc+nm\nLcD3qmquqv4H+DxwIbCmu5QDsB7Y33NGSVIPfUL/feCCJK9KEmAj8AhwD/D2bpstwB39RpQk9dHn\nGv19zL/o+gDw7e65dgDvB96XZA/wOuCWMcwpSRrR6qU3ObKquhG48SWrnwDO7/O8kqTx8ZOxktQ4\nQy9JjTP0ktQ4Qy9JjTP0ktQ4Qy9JjTP0ktQ4Qy9JjTP0ktQ4Qy9JjTP0ktQ4Qy9JjTP0ktQ4Qy9J\njTP0ktQ4Qy9Jjev1i0ckTc70trsG2e/e7ZsG2a8mxzN6SWqcoZekxhl6SWqcoZekxhl6SWpcr9An\nWZPk9iSPJtmd5HeSnJ5kV5LHu5+njWtYSdLR63tG/3HgK1X168BvAbuBbcDdVXUOcHe3LEkayMih\nT/Ja4HeBWwCq6udV9TywGdjZbbYTuLzvkJKk0fU5o98AzAH/kOTBJDcneTVwRlU93W3zDHBG3yEl\nSaPrE/rVwJuBT1TVm4D/4iWXaaqqgDrcg5NsTTKbZHZubq7HGJKkxfQJ/T5gX1Xd1y3fznz4f5Dk\nTIDu54HDPbiqdlTVTFXNTE1N9RhDkrSYkUNfVc8ATyX5tW7VRuAR4E5gS7duC3BHrwklSb30/VKz\nPwNuTXIS8ATwbub/8bgtydXAk8AVPfchSeqhV+ir6iFg5jB3bezzvJKk8fGTsZLUOEMvSY0z9JLU\nOEMvSY0z9JLUOEMvSY0z9JLUOEMvSY0z9JLUOEMvSY0z9JLUOEMvSY0z9JLUOEMvSY0z9JLUOEMv\nSY0z9JLUOEMvSY0z9JLUOEMvSY0z9JLUOEMvSY3rHfokq5I8mOSL3fKGJPcl2ZPks0lO6j+mJGlU\n4zijvxbYvWD5JuCjVfUG4IfA1WPYhyRpRL1Cn2Q9sAm4uVsOcDFwe7fJTuDyPvuQJPXT94z+Y8D1\nwC+65dcBz1fVwW55H7Cu5z4kST2sHvWBSS4FDlTV/UkuGuHxW4GtAGefffaoY6xI09vuGnoESSeQ\nPmf0FwKXJdkLfIb5SzYfB9YkefEfkPXA/sM9uKp2VNVMVc1MTU31GEOStJiRQ19VN1TV+qqaBq4E\n/q2q3gHcA7y922wLcEfvKSVJI5vE++jfD7wvyR7mr9nfMoF9SJKWaeRr9AtV1deAr3W3nwDOH8fz\nSpL685OxktQ4Qy9JjTP0ktQ4Qy9JjTP0ktQ4Qy9JjTP0ktQ4Qy9JjTP0ktQ4Qy9JjTP0ktS4sXzX\njaR2DPn7DvZu3zTYvlvmGb0kNc7QS1LjDL0kNc7QS1LjDL0kNc7QS1LjDL0kNc7QS1LjDL0kNc7Q\nS1LjDL0kNW7k0Cc5K8k9SR5J8nCSa7v1pyfZleTx7udp4xtXknS0+pzRHwSuq6pzgQuAa5KcC2wD\n7q6qc4C7u2VJ0kBGDn1VPV1VD3S3fwLsBtYBm4Gd3WY7gcv7DilJGt1YrtEnmQbeBNwHnFFVT3d3\nPQOccYTHbE0ym2R2bm5uHGNIkg6jd+iTnAp8DnhvVf144X1VVUAd7nFVtaOqZqpqZmpqqu8YkqQj\n6BX6JK9gPvK3VtXnu9U/SHJmd/+ZwIF+I0qS+ujzrpsAtwC7q+ojC+66E9jS3d4C3DH6eJKkvvr8\nKsELgXcC307yULfuA8B24LYkVwNPAlf0G1GS1MfIoa+qfwdyhLs3jvq8kqTx8pOxktQ4Qy9JjTP0\nktQ4Qy9JjTP0ktS4Pm+vlKSxmt521yD73bt90yD7PVY8o5ekxhl6SWqcoZekxhl6SWqcL8b2MNQL\nR5J0NDyjl6TGGXpJapyhl6TGGXpJapyhl6TGGXpJapyhl6TG+T56SSvekJ+JORZfqOYZvSQ1ztBL\nUuNO+Es3N33lUf55dt8x3+/Zp59yzPcpSaOYWOiTXAJ8HFgF3FxV2yexnxf++yDPvvCzSTz1ok49\nedUx36ckjWIil26SrAL+FngrcC5wVZJzJ7EvSdLiJnWN/nxgT1U9UVU/Bz4DbJ7QviRJi5jUpZt1\nwFMLlvcBvz2JHb1+zSmct+41k3jqxff72lPY+58/Peb7laSjNdiLsUm2Alu7xReSPDbAGGuBZwfY\n7/HK43Eoj8ehPB6HGsvxyE29Hv6ry9loUqHfD5y1YHl9t+7/VdUOYMeE9r8sSWarambIGY4nHo9D\neTwO5fE41Il0PCZ1jf4bwDlJNiQ5CbgSuHNC+5IkLWIiZ/RVdTDJnwL/wvzbKz9ZVQ9PYl+SpMVN\n7Bp9VX0J+NKknn9MBr10dBzyeBzK43Eoj8ehTpjjkaoaegZJ0gT5XTeS1DhD30lyXZJKsnboWYaU\n5MNJHk3yrSRfSLJm6JmGkOSSJI8l2ZNk29DzDCnJWUnuSfJIkoeTXDv0TMeDJKuSPJjki0PPshRD\nz/xfZOD3ge8PPctxYBdwXlW9EfgucMPA8xxzfoXHyxwErquqc4ELgGtW+PF40bXA7qGHWA5DP++j\nwPXAin/Boqq+WlUHu8V7mf8MxErjV3gsUFVPV9UD3e2fMB+3dcNONawk64FNwM1Dz7IcKz70STYD\n+6vqm0PPchx6D/DloYcYwOG+wmNFh+1FSaaBNwH3DTvJ4D7G/MnhL4YeZDlO+O+jX44k/wr8ymHu\n+iDwAeYv26wYix2Pqrqj2+aDzP+X/dZjOZuOX0lOBT4HvLeqfjz0PENJcilwoKruT3LR0PMsx4oI\nfVW95XDrk/wmsAH4ZhKYv0zxQJLzq+qZYzjiMXWk4/GiJO8CLgU21sp8/+2SX+Gx0iR5BfORv7Wq\nPj/0PAO7ELgsyduAVwKvSfJPVfVHA891RL6PfoEke4GZqlqxX9zU/cKYjwC/V1VzQ88zhCSrmX8h\neiPzgf8G8Icr9dPdmT8L2gk8V1XvHXqe40l3Rv+XVXXp0LMsZsVfo9fL/A3wy8CuJA8l+fuhBzrW\nuhejX/wKj93AbSs18p0LgXcCF3d/Jx7qzmZ1gvCMXpIa5xm9JDXO0EtS4wy9JDXO0EtS4wy9JDXO\n0EtS4wy9JDXO0EtS4/4P+m0iZ8KcIzMAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f22d25bf9e8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.hist(y);"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 147,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(500, 499)"
      ]
     },
     "execution_count": 147,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 148,
   "metadata": {},
   "outputs": [],
   "source": [
    "gs_ridge = GridSearchCV(Ridge(), {'alpha': np.logspace(-6, 2, 20)},\n",
    "                        scoring='neg_median_absolute_error', cv=10).fit(X, y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 149,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'alpha': 100.0}"
      ]
     },
     "execution_count": 149,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "gs_ridge.best_params_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 150,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "-0.88770978619896734"
      ]
     },
     "execution_count": 150,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "gs_ridge.best_score_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 157,
   "metadata": {},
   "outputs": [],
   "source": [
    "enet_params = {\n",
    "    'alpha': np.logspace(-6, -1, 6),\n",
    "    'l1_ratio': [0.1, 0.2, 0.3],\n",
    "}\n",
    "gs_enet = GridSearchCV(ElasticNet(max_iter=10000), enet_params,\n",
    "                       scoring='neg_median_absolute_error', cv=10, n_jobs=10)\n",
    "gs_enet.fit(X, y);"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 158,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "-0.62234474540259543"
      ]
     },
     "execution_count": 158,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "gs_enet.best_score_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 159,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'alpha': 0.10000000000000001, 'l1_ratio': 0.3}"
      ]
     },
     "execution_count": 159,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "gs_enet.best_params_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 160,
   "metadata": {},
   "outputs": [],
   "source": [
    "def plot_learning_curve(estimator, title, X, y, ylim=None, cv=None,\n",
    "                        n_jobs=1, train_sizes=np.linspace(.1, 1.0, 5)):\n",
    "    plt.figure()\n",
    "    plt.title(title)\n",
    "    if ylim is not None:\n",
    "        plt.ylim(*ylim)\n",
    "    plt.xlabel(\"Training examples\")\n",
    "    plt.ylabel(\"Score\")\n",
    "    train_sizes, train_scores, test_scores = learning_curve(\n",
    "        estimator, X, y, cv=cv, n_jobs=n_jobs, train_sizes=train_sizes,\n",
    "        scoring='neg_median_absolute_error')\n",
    "    train_scores_mean = np.mean(train_scores, axis=1)\n",
    "    train_scores_std = np.std(train_scores, axis=1)\n",
    "    test_scores_mean = np.mean(test_scores, axis=1)\n",
    "    test_scores_std = np.std(test_scores, axis=1)\n",
    "    plt.grid()\n",
    "\n",
    "    plt.fill_between(train_sizes, train_scores_mean - train_scores_std,\n",
    "                     train_scores_mean + train_scores_std, alpha=0.1,\n",
    "                     color=\"r\")\n",
    "    plt.fill_between(train_sizes, test_scores_mean - test_scores_std,\n",
    "                     test_scores_mean + test_scores_std, alpha=0.1, color=\"g\")\n",
    "    plt.plot(train_sizes, train_scores_mean, 'o-', color=\"r\",\n",
    "             label=\"Training score\")\n",
    "    plt.plot(train_sizes, test_scores_mean, 'o-', color=\"g\",\n",
    "             label=\"Cross-validation score\")\n",
    "\n",
    "    plt.legend(loc=\"best\")\n",
    "    return plt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 161,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n/tOf/rTs/b333uuXXXaZu7ufcsopPmjQIO/bt6/ffffdZfPsu+++/tVXX7m7e9u2bd3dvbS01C+7\n7DLv1auXjx492o8//nh/5JFH3N39hhtu8KKiIi8sLPQLL7zQS0tL/ZFHHvG2bdt6r169fODAgb55\n82YfMWKEz58/393d//rXv3q/fv28sLCwbNj2+PquueYaHzBggB922GH+5ZdfVvlN8+fP94EDB/rA\ngQP9kEMOKfsbTJ061fv16+cDBgzwiRMnurv766+/7ocddpj379/fTz31VF+7dq27u48YMcKvuOIK\nHzx4sP/617/21atX+/jx472oqMiLior8xRdf3MlftBxpDKue8Y18fTyaZHBUp6TEfevWECjffOP+\n1Vc+75lnQqC8+ab7I4+EQDn3XPcjjnDv3LlioHTo4D54sPvZZ7vfeGOLC5TmHBxXPHmFj7h3RLWP\nvJvyKoRG/JF3U17S+Y/6w1F+xZNX7HSdt99+u1955ZVJP5s3b57n5+f7Rx995O7uCxcu9H79+nlx\ncbFv3LjR+/bt66+99po/+uijfsEFF5R9b926db5mzRrv1auXl0b/Hr/55psqy1+9erUfcMABZe/H\njBnjL7zwgru7f/311+7uvnnzZi8sLPQ1a9a4e/LgeOyxx/yYY47xWCzmK1as8IKCgrLgiC/H3f2c\nc87xmTNnunvYOC9YsKDss3hwrFixwvfee29fvXq179ixw0eNGuUzZsxwd3eg7PtXXXWV33TTTVV+\n09ixY8s27Bs3bvQdO3b4rFmz/IgjjvBNmzZVKFP//v3Lwuq///u//Yorrigry6WXXlq2zLPOOqus\nXpYvX+69e/eust5k0gmOxnUsKVVlZYUr16PRQYHQ/NW1a7g4cb/94Jhjyk/Ku8OaNeVNXfFmryef\nhL/+tXwZBQXl51DiTV6FhbDXXuVNbGryatK2lSQfPr266XVh6NCh7LfffkAY9nzcuHFlI8uOHz+e\nF154gTFjxvCTn/yEiRMnMnbsWIYPH142dMj555/P2LFjGTt2bJVl77777uy///688sorHHTQQSxd\nurRsDKw77riDGTNmAPDZZ5+xbNkydtttt6RlfP755znrrLPIzs6mR48eHH300WWfzZs3j//5n/9h\n8+bNrF27lsLCQk466aRqf++CBQsYOXIku+++OwATJkzg+eef59RTT6VVq1Zlv2Pw4MHMnj27yveH\n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\nTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f22ad289390>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "title = \"Learning Curves (ElasticNet)\"\n",
    "cv = ShuffleSplit(n_splits=50, test_size=0.1, random_state=0)\n",
    "enet = ElasticNet(alpha=1e-1, l1_ratio=0.3, max_iter=10000)\n",
    "plot_learning_curve(enet, title, X, y, ylim=(-2, 0.1), cv=cv, n_jobs=4);"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 162,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\nEgWHiIhE8v/cs+rOeXTa3QAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f231c47eef0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "title = \"Learning Curves (Ridge)\"\n",
    "cv = ShuffleSplit(n_splits=50, test_size=0.1, random_state=0)\n",
    "ridge = Ridge(alpha=100)\n",
    "plot_learning_curve(ridge, title, X, y, ylim=(-2, 0.1), cv=cv, n_jobs=4);"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.5.0"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 0
}
